/**
 * 本地存储Hook
 * 用于在localStorage中存取数据
 */

export default function useLocalStorage() {
  /**
   * 获取本地存储中的值
   * @param {string} key - 存储的键名
   * @param {*} defaultValue - 默认值，当存储中无值时返回
   * @returns {*} 存储的值或默认值
   */
  function getItem(key, defaultValue = null) {
    try {
      const value = localStorage.getItem(key)
      if (value === null) return defaultValue
      return JSON.parse(value)
    } catch (error) {
      console.error('从localStorage获取数据失败:', error)
      return defaultValue
    }
  }

  /**
   * 设置值到本地存储
   * @param {string} key - 存储的键名
   * @param {*} value - 要存储的值
   */
  function setItem(key, value) {
    try {
      localStorage.setItem(key, JSON.stringify(value))
    } catch (error) {
      console.error('存储数据到localStorage失败:', error)
    }
  }

  /**
   * 从本地存储中移除指定键
   * @param {string} key - 要移除的键名
   */
  function removeItem(key) {
    try {
      localStorage.removeItem(key)
    } catch (error) {
      console.error('从localStorage移除数据失败:', error)
    }
  }

  /**
   * 清空本地存储
   */
  function clear() {
    try {
      localStorage.clear()
    } catch (error) {
      console.error('清空localStorage失败:', error)
    }
  }

  return {
    getItem,
    setItem,
    removeItem,
    clear,
  }
}
